home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
021-030
/
amok29
/
discopper
/
backdrop.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
5KB
|
171 lines
(*---------------------------------------------------------------------------
:Program. BackDrop.mod
:Contents. Öffnet Screen und BackDrop-Borderless-SmartRefresh-Window
:Author. Bernd Preusing
:Address. Gerhardstr. 16 D-2200 Elmshorn
:Phone. 04121/22486
:Copyright. Public Domain
:Language. Modula-2
:Translator. M2Amiga V3.2e
:Support. einige Ideen von Pit Burkhardt [pit]
:History. V1.2 Preusing 27-Apr-89
:Bugs. NTSC: not tested
:Remark. Für fast Alles zu gebrauchen, kann auch OverScan!
:Remark. Nicht reentrant!
---------------------------------------------------------------------------*)
IMPLEMENTATION MODULE BackDrop;
FROM SYSTEM IMPORT ADDRESS, ADR;
FROM Arts IMPORT TermProcedure, Assert, CurrentLevel;
FROM Exec IMPORT execBase;
FROM Graphics IMPORT FontFlagSet, FontStyleSet, RastPortPtr, TextAttr,
ViewModeSet, ViewModes;
FROM Intuition IMPORT customScreen, IDCMPFlags, IDCMPFlagSet, NewScreen,
NewWindow, ScreenFlags, ScreenFlagSet, ScreenPtr,
WindowFlags, WindowFlagSet, WindowPtr,
CloseScreen, CloseWindow, MakeScreen, OpenWindow,
OpenScreen, ShowTitle, RethinkDisplay;
(* ============== aus BackDrop.def: ==================
VAR BdScreen: ScreenPtr;
BdWindow: WindowPtr;
BdRp : RastPortPtr;
======================================================*)
CONST
YSTART = 12; (* win zu screen y *)
VAR NewWin :NewWindow;
NewScr :NewScreen;
Topaz8Attr :TextAttr;
StdHeight,
LaceHeight :INTEGER;
StartLevel :INTEGER;
PROCEDURE CloseBackDrop;
BEGIN
IF BdWindow<>NIL THEN
CloseWindow(BdWindow);
BdWindow:=NIL
END;
IF BdScreen<>NIL THEN
CloseScreen(BdScreen);
BdScreen:=NIL
END;
END CloseBackDrop;
PROCEDURE OpenBackDrop(Depth, Width, Height:INTEGER; Title:ADDRESS);
(* Input. Depth: Anzahl Bitplanes des Screens
Input. falls Depth=6, dann ExtraHalfBrite
Input. Width: Breite des Windows und des Screens
Input. Height: Höhe des WINDOWS!
Input. Title: Addresse des Screen-Titels
Input. falls NIL: kein Titel, Screenhöhe = Windowhöhe,
Input. sonst Screenhöhe = Windowhöhe+12
Semantic. Öffnet Screen und Window, je nach Breite und Höhe wird
Semantic. Interlace und/oder HiRes gesetzt. Keine IDCMPs!
Semantic. Das Ding kommt MITTIG auf die Glotze! (versuche: 200,50!)
*)
VAR
MoveX, MoveY: INTEGER;
BEGIN
MoveX:=0; MoveY:=0;
WITH NewScr DO
width:=Width;
leftEdge:=0; topEdge:=0;
height:=Height;
IF Title#NIL THEN INC(height,YSTART) END;
depth:=Depth;
detailPen:=0; blockPen:=1;
viewModes:=ViewModeSet{};
IF width>320+64 THEN
INCL(viewModes,hires);
MoveX:=(width-640)/2
ELSE
MoveX:=(width-320)/2;
IF Depth=6 THEN INCL(viewModes,extraHalfbrite) END;
END;
IF height > StdHeight+60 THEN
INCL(viewModes,lace);
IF (height<LaceHeight-12) OR (height>LaceHeight+12) THEN
MoveY:=(height-LaceHeight)/2;
END;
ELSE
IF (height<StdHeight-6) OR (height>StdHeight+6) THEN
MoveY:=(height-StdHeight)/2;
END;
END;
type:=customScreen;
font:=ADR(Topaz8Attr);
defaultTitle:=Title;
gadgets:=NIL;
customBitMap:=NIL;
END; (*WITH*)
BdScreen:=OpenScreen(NewScr);
Assert(BdScreen<>NIL,ADR("Konnte BackDropScreen nicht öffnen"));
WITH BdScreen^.viewPort DO
DEC(dxOffset,MoveX);
DEC(dyOffset,MoveY);
END;
MakeScreen(BdScreen);
RethinkDisplay;
WITH NewWin DO
leftEdge:=0;
IF Title=NIL THEN
topEdge:=0;
ShowTitle(BdScreen,FALSE);
ELSE
topEdge:=YSTART
END;
width:=Width;
height:=Height;
detailPen:=0;
blockPen:=1;
idcmpFlags:=IDCMPFlagSet{}; (* erstmal nix *)
flags:=WindowFlagSet{backDrop, borderless, activate}; (* smartRefresh *)
title:=NIL;
type:=customScreen;
firstGadget:=NIL;
checkMark:=NIL;
screen:=BdScreen;
bitMap:=NIL;
(* minWidth:=width; das kann entfallen!
minHeight:=height;
maxWidth:=width;
maxHeight:=height; *)
END; (*WITH*)
BdWindow:=OpenWindow(NewWin);
Assert(BdWindow<>NIL,ADR("konnte Fenster nicht öffnen"));
BdRp:=BdWindow^.rPort;
END OpenBackDrop;
PROCEDURE Cleanup;
BEGIN
IF CurrentLevel()<=StartLevel THEN
CloseBackDrop
END
END Cleanup;
BEGIN (* module *)
IF execBase^.vBlankFrequency=50 THEN
StdHeight:=256
ELSE
StdHeight:=200
END;
LaceHeight:=2*StdHeight;
WITH Topaz8Attr DO
name:=ADR("topaz.font");
ySize:=8;
style:=FontStyleSet{};
flags:=FontFlagSet{};
END;
BdScreen:=NIL;
BdWindow:=NIL;
StartLevel:=CurrentLevel();
TermProcedure(Cleanup);
END BackDrop.mod